perm filename P2LOAD.FAI[SS,SYS]2 blob
sn#431366 filedate 1979-04-10 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 A B C D TT1 TT2 TT3 TT4 P CTYLIN ACWPRV JOBSAV JOBDDT P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG DEFNAM DEFPPN BUFIOW FILNAM EXT PDLEN PDL START STRDET SEMILP NOSEMI SEMICL NOPRG NOPPN OPENIT WIN RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX NOACW NOFILE IOERR GOAWAY
C00012 ENDMK
C⊗;
;A B C D TT1 TT2 TT3 TT4 P CTYLIN ACWPRV JOBSAV JOBDDT P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG DEFNAM DEFPPN BUFIOW FILNAM EXT PDLEN PDL START STRDET SEMILP NOSEMI SEMICL NOPRG NOPPN OPENIT WIN RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX NOACW NOFILE IOERR GOAWAY
TITLE P2LOAD PROGRAM TO LOAD P2SYS INTO P2 MEMORY
A←1
B←2
C←3
D←4
TT1←5 ;Contains 'CTY'. All typeout goes both to TTY and to CTY.
TT2←6 ;Address of ASCIZ string to typeout
TT3←7 ;AC for TTYMES
TT4←10 ;Instruction to execute to (maybe) duplicate CTY typeout on TTY
P←17
CTYLIN←←200000 ;Line characteristics bit for CTY
ACWPRV←←40
JOBSAV←←73 ;LAST LOCATION NOT SAVED IN DUMP FILE
JOBDDT←←74 ;LOCATION OF DDT'S ADDRESS
P2SORG←←200 ;FIRST LOCATION WE SHOULD LOAD FROM P2SYS FILE
P2LOOP←←101 ;HERE IS WHERE P2 WILL LOOP WAITING FOR US
P2NUM←←210 ;ZERO THIS TO TELL RUNNING P2 TO SHUT DOWN
HNGP2F←←212 ;SETOM THIS TO TELL P1 TO FLUSH ACTIVE P2 DEVICES
JOBSYM←←116 ;WHERE TO FIND SYMBOL TABLE POINTER
P2SIZE←←400 ;HOW MANY PAGES OF P2 CORE
OPDEF P2UUO [CALLI 400125] ;JUST UNTIL TOMORROW
NOREAD←←<P2SORG-JOBSAV>-1 ;NUMBER OF WORDS OF DMP FILE WE IGNORE
BUFLEN←←<NOREAD+177>&777600 ;LENGTH OF BUFFER WE READ INTO
BLTLEN←←BUFLEN-NOREAD ;HOW MANY WORDS WE HAVE TO BLT INTO P2 CORE
BUFFER: BLOCK BUFLEN ;HERE IS THE BUFFER
BLTORG←←BUFFER+NOREAD ;FIRST WORD WE CARE ABOUT
SAVORG←←BUFFER-<JOBSAV+1> ;ADDR X IN CORE IMAGE IS WORD SAVORG+X HERE
DEFNAM: SIXBIT /P2SYS DMP/
DEFPPN: SIXBIT / SSYS/
BUFIOW: IOWD BUFLEN,BUFFER
0
FILNAM: 0
EXT: 0
PDLEN←←10
PDL: BLOCK PDLEN
START: RESET
OUTSTR [ASCIZ/
/] ;IN CASE NOT LOGGED IN
MOVE P,[IOWD PDLEN,PDL]
MOVSI A,ACWPRV ;MUST BE ABLE TO WRITE P2 CORE
SETPRV A,
MOVSI TT1,'CTY' ;ALWAYS TYPE OUT ON CTY
MOVE TT4,[OUTSTR (TT2)] ;INSTRUCTION TO DUPLICATE TYPEOUT ON OWN TTY
SETO A,
GETLIN A ;SEE IF WE ARE DETACHED
AOJE A,STRDET ;JUMP IF DETACHED
TLNE A,CTYLIN
MOVSI TT4,(<CAI>) ;WE'RE ON CTY, DON'T TYPE OUT EVERYTHING TWICE
STRDET: P2UUO 4, ;GET P2 MEMORY AS OUR UPPER
JRST NOACW
JUMPE A,NOSEMI ;JUMP IF DETACHED -- DON'T TRY TO SCAN FILENAME
RESCAN ;LOOK FOR NONSTANDARD FILENAME
SEMILP: INCHSL A ;READ A CHAR SEARCHING FOR SEMICOLON
JRST NOSEMI ;NOTHING TO READ, USE STANDARD FILE
CAIN A,";"
JRST SEMICL ;GOT ONE, NOW READ FILENAME
CAIE A,175
CAIN A,12
JRST NOSEMI ;END OF LINE WITH NO SEMI
JRST SEMILP ;ELSE KEEP LOOKING
NOSEMI: DMOVE A,DEFNAM
MOVE D,DEFPPN
JRST OPENIT ;USE STANDARD FILENAME
SEMICL: PUSHJ P,GETWRD ;READ FILENAME
JUMPN B,.+2 ;MUST BE A FILENAME
MOVE B,DEFNAM ;ELSE WE USE THE DEFAULT
MOVEM B,FILNAM
MOVSI B,'DMP'
CAIN A,"." ;EXPLICIT EXTENSION?
PUSHJ P,GETWRD ;YES, READ IT
MOVEM B,EXT
MOVE D,DEFPPN ;DEFAULT PPN
CAIE A,"[" ;EXPLICIT PPN?
JRST NOPPN ;NO, USE STANDARD
MOVEI D,0
DSKPPN D, ;GET DEFAULT PPN
PUSHJ P,GETRT ;GET PRJ
JUMPE B,.+2 ; IF ANY
HRL D,B
CAIE A,"," ;EXPLICIT PRG?
JRST NOPRG ;NO
PUSHJ P,GETRT ;YES, READ IT
JUMPE B,.+2
HRR D,B
NOPRG: CAIN A,"]"
PUSHJ P,RSKPSP ;SKIP BRACKET IF ANY
NOPPN: CAIE A,12
JRST SYNTAX ;MUST END WITH CRLF
DMOVE A,FILNAM ;GET NAME AND EXT
OPENIT: INIT 17 ;OPEN THE DISK
'DSK '
0
JRST NOFILE
LOOKUP A ;FIND THE FILE
JRST NOFILE ;OOPS
SETZM 400000+P2NUM ;TELL P2 TO SHUT DOWN WHILE WE LOAD IT
SETOM 400000+HNGP2F ;TELL P1 TO SHUT DOWN ACTIVE P2 DEVICES
HLRES D ;NEGATIVE LENGTH OF FILE
IN BUFIOW ;READ FIRST PART OF FILE
JRST .+2 ;READ OK
JRST IOERR ;OOPS
MOVE A,[BLTORG,,400000+P2SORG]
BLT A,400000+P2SORG+BLTLEN-1
MOVEI A,<P2SIZE⊗9>-1 ;HIGHEST LOCATION IN P2 CORE
MOVEM A,400037 ;DDT JOBREL
MOVE A,SAVORG+JOBSYM ;JOBSYM FROM FILE
MOVEM A,400036 ;SAVE HERE FOR DDT
MOVE A,SAVORG+JOBDDT ;JOBDDT FROM FILE
MOVEM A,400000+JOBDDT ;SAVE FOR P2INI
HRLZI A,BUFLEN(D) ;LENGTH OF FILE TO GO
HRRI A,400000+P2SORG+BLTLEN-1
MOVEI B,0 ;END OF IOWD LIST
IN A ;READ REST DIRECTLY INTO P2 CORE
JRST WIN ;DONE!
MOVEI TT2,[ASCIZ /P2LOAD: Error in second part of read. Beware!
/]
JRST GOAWAY
WIN: MOVEI TT2,[ASCIZ /P2 loaded... /]
MOVEI TT3,TT1
TTYMES TT3,
JFCL
XCT TT4 ;Maybe type on own TTY too (if not same as CTY)
MOVE A,[JRST 204] ;SEND P2 TO P2INI
MOVEM A,400000+P2LOOP ;IT'S BEEN JRSTING POINT HERE
MOVEI A,2
SLEEP A, ;WAIT A WHILE
MOVE A,400000+P2NUM
MOVEI TT2,[ASCIZ /P2 needs to be started, at 204.
/]
JUMPE A,GOAWAY
MOVEI TT2,[ASCIZ /P2 running.
/]
AOJE A,GOAWAY
MOVEI TT2,[ASCIZ /P2 loaded, but not with a P2 system!
/]
JRST GOAWAY
RSKPSP: INCHWL A ;SKIP TO A REAL CHAR
SKIPSP: CAIN A,15 ;IGNORE CR
JRST RSKPSP
CAIE A,40 ;IGNORE SPACE
CAIN A,11 ;IGNORE TAB
JRST RSKPSP
POPJ P,
GETWRD: PUSHJ P,RSKPSP ;SKIP PUNCTUATION CHAR BEFORE READING NAME
MOVEI B,0
MOVE C,[POINT 6,B]
GETWR1: CAILE A,140
SUBI A,40 ;LC TO UC
CAIL A,"A" ;HO HUM
CAILE A,"Z"
JRST GETWR3
GETWR2: SUBI A,40
TRNN B,77
IDPB A,C
INCHWL A
JRST GETWR1
GETWR3: CAIL A,"0"
CAILE A,"9"
JRST SKIPSP
JRST GETWR2
GETRT: PUSHJ P,RSKPSP ;SKIP PUNCTUATION CHAR BEFORE READING NAME
MOVEI B,0
MOVE C,[POINT 6,B]
GETRT1: CAILE A,140
SUBI A,40 ;LC TO UC
CAIL A,"A" ;HO HUM
CAILE A,"Z"
JRST GETRT3
GETRT2: LSH B,6
ADDI B,-40(A)
INCHWL A
JRST GETRT1
GETRT3: CAIL A,"0"
CAILE A,"9"
JRST SKIPSP
JRST GETRT2
SYNTAX: CLRBFI ;SORRY
OUTSTR [ASCIZ /Error in filename, try again.
/]
EXIT
NOACW: MOVEI TT2,[ASCIZ /P2LOAD: Can't write P2 memory! (Maybe NOP2 set, maybe no ACW.)
/]
JRST GOAWAY
NOFILE: MOVEI TT2,[ASCIZ /P2LOAD: Can't look up file!
/]
JRST GOAWAY
IOERR: MOVEI TT2,[ASCIZ /P2LOAD: Error on first read. P2 core not modified.
/]
GOAWAY: MOVEI TT3,TT1
TTYMES TT3,
JFCL
XCT TT4 ;Maybe type on own TTY too (if not same as CTY)
EXIT
END START